#include "lcd.h"

int lcd_fd;
int *plcd;

void lcd_init(void)
{
    /* 打开文件 */
	lcd_fd = open("/dev/fb0",O_RDWR);
	if(-1 == lcd_fd)
	{
	    //perror会将指定的字符串输出，并在该字符串后跟着输出错误原因
		perror("打开屏幕失败"); 
		return;
	}
	printf("打开屏幕成功，象征着该屏幕被打开的标识是：%d(文件描述符)\n",lcd_fd);
	/* 映射 */
	plcd = (uint*)mmap(NULL, //系统自动选择映射地址
	                    800*480*4,//LCD屏 800*480像素点的32位屏
	                    PROT_WRITE|PROT_READ, //文件描述符是可读可写的
	                    MAP_SHARED, //共享映射，操作映射内存会同步到文件
	                    lcd_fd, //要映射的文件
	                    0); //从文件头开始映射
	if(MAP_FAILED == plcd)
	{
		perror("映射LCD失败");
		close(lcd_fd);
		return;
	}

}

void lcd_uninit(void)
{
    /* 解除映射 */
	munmap(plcd,800*480*4);
	/* 关闭文件（不再操作该文件，则记得关闭，避免浪费内核资源 */
	close(lcd_fd);
}

void lcd_draw_point(int x,int y,int color)
{
    //给坐标位 (x,y)像素点显示颜色
    *(plcd+y*800+x) = color; 
}

void lcd_draw_clear(int x0,int y0,int w,int h,int color)
{
    int x,y;
    for(y=y0;y<h;y++)
    {
        for(x=x0;x<w;x++)
        {
            lcd_draw_point(x,y,color);
        }
    }
}

